<?php
define('IS_OK','ok');
	$GLOBALS['_runtimestart'] = microtime(true);
	/**
	 * 框架主入口文件
	 * 用于创建目录常量 ， 和创建应用目录
	 */
	class Lwbphp{
		/**
		 * 初始化框架函数
		 */
		public static function run(){
			try{
				//创建目录常量
				self::setConst();
				//引入异常类
				self::loadException();
				//创建应用要使用的目录
				self::mkAppDir();
				//载入核心文件
				self::loadCore();
				//调用应用类初始化应用
				App::run();
				if(C('DEVP_MODE')){
					self::devMode();
				}
			}catch(IncludeException $e){
				echo $e->getErrors();
			}catch(Exception $e){
				echo $e->getMessage();
			}
			
		}
		
		/**
		 * 启动开发模式可以看到一些目录信息
		 */
		private static function devMode(){
			
			//脚本运行时间
			$runtime = runttime($GLOBALS['_runtimestart']);
			//服务器名
			$serverIp = $_SERVER['SERVER_NAME'];
			//session id
			$sid = session_id();
			//项目录
			$rootpath = ROOT_PATH;
			//请求方式
			$mthod = $_SERVER['REQUEST_METHOD'];
			$uri = $_SERVER['REQUEST_URI'];
			//URI
			$querystring = isset($_SERVER['QUERY_STRING'])?$_SERVER['QUERY_STRING']:null;
			//脚本名
			 $scriptname = $_SERVER['SCRIPT_NAME'];
			 //当前控制器
			 $c = CONTROLLER;
// 			 当前控制器方法
			$a = ACTION;
			 //服务器商品
			 $serverport = $_SERVER['SERVER_PORT'];
			 //完整访问路径 
			 $allpath = 'http://'.$serverIp.$uri;
			 header('Content-Type:text/html;charset=utf-8');
			$str = <<<str
			<div style="position:fixed;bottom:100px;left:15%;background:#ccc;width:800px;margin:0 auto;padding:5px;color:#333;border-radius:5px;font-family:微软雅黑;line-height:25px;">
				<ul>
					<li>
						当前脚本运行时间:{$runtime}
					</li>
					<li>
						服务器名：{$serverIp}
					</li>
					<li>
						当前工作目录 : {$rootpath}
					</li>
					<li>
						完整路径 : {$allpath}
					</li>
					<li>
						控制器 : {$c} | 控制器方法 : {$a}
					</li>
					<li>
						当前脚本名 : {$scriptname}
					</li>
					<li>
						QueryString : {$querystring}
					</li>
					<li>
						会话ID : {$sid} | 请求方式 : {$mthod} | 端口：{$serverport}		
					</li>
				</ul>
			</div>
str;
			echo $str;
		}
		
		
		/**
		 * 引入异常类文件
		 */
		private static function loadException(){
			$exceptions = array(
					CORE_PATH.'/IncludeException.class.php'
			);
			foreach($exceptions as $file){
				if(!is_file($file)){
					echo $file;
					halt('异常找不到无法启用框架');
				}
				require_once($file);
			}
		}
		
		/**
		 * 载入核心框架核心文件
		 */
		private static function loadCore(){
			$coreFiles = array(
					//所有控制器的父类
				COMMON_PATH.'/functions.php',
				CORE_PATH.'/SmartyView.class.php',
				CORE_PATH.'/Controller.class.php',
				CORE_PATH.'/App.class.php',
				
				
			);
				foreach($coreFiles as $file){
					if(!is_file($file)){
						throw new IncludeException($file,'框架核心文件找不到 ): ',1);
					}
					require_once($file);			
			}
		}
		
		/**
		 * 以当前框架入口文件为基准进行定义
		 * 一些框架要用到的目录常量  这里的常量 的值为
		 * 盘符路径   
		 * 这里定义 的目录是Controller层要使用的  __XXX__定义的是VIEW层要使用的
		 */
		private static function setConst(){
			//框架名
			define('LWB','LwbPHP框架');
			//框架目录
			define('LWB_PATH',str_replace('\\','/',__DIR__));
// 			define('LWB_PATH',str_replace('\\','/',getcwd()));
			//定义LIB库目录
			define('LIB_PATH',LWB_PATH.'/Lib');
			//Core目录核心目录
			define('CORE_PATH',LIB_PATH.'/Core');
			//定义框架函数目录 框架函数目录
			define('COMMON_PATH',LWB_PATH.'/Common');
			//定义扩展目录 用于访问一些工具类
			define('EXTEND_PATH',LWB_PATH.'/Extend');
			//定义框架配置文件目录
			define('CONFIG_PATH',LWB_PATH.'/Config');
			//定义框架配置文件路径 
			define('CONFIG_FILE',CONFIG_PATH.'/Config.php');
			//定义工具目录用于保存工具类
			define('TOOL_PATH',EXTEND_PATH.'/Tool');
			//定义Data框架要使用到的其他文件的目录
			define('DATA_PATH',LWB_PATH.'/Data');
			//定义字体文件
			define('FONT_PATH',DATA_PATH.'/Font');
			
			
			//定义ORG目录
			define('ORG_PATH',EXTEND_PATH.'/Org');
			//smarty目录
			define('SMARTY_PATH',ORG_PATH.'/Smarty');
			//定义整个项目的根目录
			define('ROOT_PATH',dirname(LWB_PATH));
			//定义应用目录
			define('APP_PATH',ROOT_PATH.'/'.APP_NAME);
			//定义应用模板编译目录
			define('APP_COMPILE_DIR',APP_PATH.'/Temp/Compile');
			//定义模板缓存目录
			define('APP_CACHE_DIR',APP_PATH.'/Temp/Cache');
			
			//定义应用目录的视图目录
			define('APP_VIEW_PATH',APP_PATH.'/View');
			//定义应用目录的控制器目录
			define('APP_CONTROLLER_PATH',APP_PATH.'/Controller');
			//定义应用目录的配置文件目录
			define('APP_CONFIG_PATH',APP_PATH.'/Config');
			//配置文件目录
			define('APP_CONFIG_FILE',APP_CONFIG_PATH.'/Config.php');
			//定义 应用Model目录
			define('APP_MODEL_PATH',APP_PATH.'/Model');
			//定义应用方法要使用到的公用目录都要使用到的publics目录
			define('APP_PUBLIC_PATH',APP_VIEW_PATH.'/Public');
			//定义判断是否提交了POST
			define('IS_POST', $_SERVER['REQUEST_METHOD']=='POST'?true:false);
			
			
			
		}
		/**
		 * 创建应用所需要的目录
		 */
		private static function mkAppDir(){
			$appDirs = array(
					APP_VIEW_PATH,
					APP_CONTROLLER_PATH,
					APP_CONFIG_PATH,
					APP_PUBLIC_PATH,
					APP_MODEL_PATH,
					//模板编译目录
					APP_COMPILE_DIR,
					//模板缓存
					APP_CACHE_DIR
			);
			foreach($appDirs as $dir){
				is_dir($dir) || mkdir($dir,0777,true);
			}
		}
	}
	//运行框架
	Lwbphp::run();
